package com.lsa.letcode.the48.rotateImg;

import static org.junit.Assert.*;

import java.util.Arrays;

import org.junit.*;

public class RotateImgTest {
	@Test
	public void test() {
		Solution s = new Solution();
		int n = 3;
		
//		for (int x = 0; x < n; x++) {
//			for (int y = 0; y < n; y++) {
//				System.out.print(Arrays.toString(coords(x, y)) + " " + s.coordsToN2(coords(0, 0), n, coords(x, y)) + " ");
//			}
//		}
		
//		for (int y = 0; y < n / 2; y++) {
//    		for (; y < n - y - 1; y++) {
//    			
//    		}
//		}
		
//		System.out.print(s.coordsToN2(coords(0, 0), 3, coords(0, 0)) + " ");
//		System.out.print(s.coordsToN2(coords(0, 0), 3, coords(0, 1)) + " ");
//		System.out.print(s.coordsToN2(coords(0, 0), 3, coords(0, 2)) + " ");
//		System.out.print(s.coordsToN2(coords(0, 0), 3, coords(1, 2)) + " ");
//		System.out.print(s.coordsToN2(coords(0, 0), 3, coords(2, 2)) + " ");
//		System.out.print(s.coordsToN2(coords(0, 0), 3, coords(2, 1)) + " ");
//		System.out.print(s.coordsToN2(coords(0, 0), 3, coords(2, 0)) + " ");
//		System.out.print(s.coordsToN2(coords(0, 0), 3, coords(1, 0)) + " ");
//		System.out.println();
//		
//		System.out.print(s.coordsToN2(coords(0, 0), 2, coords(0, 0)) + " ");
//		System.out.print(s.coordsToN2(coords(0, 0), 2, coords(0, 1)) + " ");
//		System.out.print(s.coordsToN2(coords(0, 0), 2, coords(1, 1)) + " ");
//		System.out.print(s.coordsToN2(coords(0, 0), 2, coords(1, 0)) + " ");
//		System.out.println();
		
		
//		n = 4;
//		for (int i = 0; i < n - 1; i++) {
//			System.out.print(s.coordsToN2(coords(0, 0), n, coords(0, i)) + " ");
//		}
//		System.out.println();
//		
//		for (int i = 0; i < n - 1; i++) {
//			System.out.print(s.coordsToN2(coords(0, 0), n, coords(i, n - 1)) + " ");
//		}
//		System.out.println();
//		
//		for (int i = n - 1; i > 0; i--) {
//			System.out.print(s.coordsToN2(coords(0, 0), n, coords(n - 1, i)) + " ");
//		}
//		System.out.println();
//		
//		for (int i = n - 1; i > 0; i--) {
//			System.out.print(s.coordsToN2(coords(0, 0), n, coords(i, 0)) + " ");
//		}
//		System.out.println();
//		System.out.println();
//		
//		n = 3;
//		for (int n2 = 0; n2 < 4 *n - 4; n2++) {
//			int[] coords = coords(-1, -1);
//			s.n2ToCoords(coords(0, 0), n, n2, coords);
//			System.out.print(n2+ "" + Arrays.toString(coords)+" ");
//		}
//		System.out.println();
//		
//		n = 4;
//		for (int n2 = 0; n2 < 4 *n - 4; n2++) {
//			int[] coords = coords(-1, -1);
//			s.n2ToCoords(coords(0, 0), n, n2, coords);
//			System.out.print(n2+ "" + Arrays.toString(coords)+" ");
//		}
//		System.out.println();
		
		{
			int[][] matrix = new int[][]{{0,1},{2,3}};
//		print(matrix);
//		System.out.println();
			s.rotate(matrix);
			Assert.assertArrayEquals(matrix, new int[][]{{2,0},{3,1}});
//		print(matrix);
//		System.out.println("-------------");
		}
		
		int[][] matrix = new int[][]{{0,1,2},{2,3,4},{5,6,7}};
//		print(matrix);
//		System.out.println();
		s.rotate(matrix);
		Assert.assertArrayEquals(matrix, new int[][]{{5,2,0},{6,3,1},{7,4,2}});
//		print(matrix);
		
//		int[] seq = new int[]{0,1,2,3};
//		System.out.println(Arrays.toString(seq));
	}
	
	void print(int[][] m) {
		for (int i = 0; i < m.length; i++) {
			for (int j = 0; j < m[i].length; j++) {
				System.out.print(String.format("%s ", m[i][j]));
			}
			System.out.println();
		}
	}
	
	int[] coords(int x, int y) {
		return new int[]{x, y};
	}
}